import { Message } from 'element-ui'
import Cookies from 'js-cookie'
import store from '../store'
// 判断token是否过期
export function hasToken() {
  return new Promise((resolve, reject) => {
    if (!Cookies.get('Authorization')) {
      store.dispatch('RefreshToken').then(res => {
        resolve(res)
      }).catch(() => {
        // 刷新token失败,跳转到首页
        reject()
        window.location.href = '/#/login'
      })
    }
  })
}

// 克隆变量
export function cloneObj(obj) {
  let temp = {}
  if (obj instanceof Array) {
    temp = []
    for (let j = 0; j < obj.length; j++) {
      temp.push(obj[j])
    }
    return temp
  } else if (obj instanceof Object) {
    for (const key in obj) {
      if ((obj[key] instanceof Array) || (obj[key] instanceof Object)) {
        temp[key] = this.cloneObj(obj[key])
      } else {
        temp[key] = obj[key]
      }
    }
  }
  return temp
}
// 删除证照信息多余的部分
export function delMore(obj, str) {
  const tempOBJ = this.cloneObj(obj)
  const tempBO = tempOBJ[str]
  const tempBO_box = []
  const tempBO_L = tempBO.length
  console.log(111)
  for (let i = 0; i < tempBO_L; i++) {
    const a_qwe = tempBO[i].licenseId
    const b_qwe = tempBO[i].gmtReg
    const c_qwe = tempBO[i].gmtOverdue
    const d_qwe = tempBO[i].fileList.length > 0
    if (a_qwe && b_qwe && c_qwe && d_qwe) {
      tempBO_box.push(tempBO[i])
    }
  }
  tempOBJ[str] = tempBO_box
  return tempOBJ
}

/**
 * 验证证照信息和油卡信息，银行卡信息
 *    规则 ：
 *      1，当某一条信息填写了一部分，其余部分都必须填写才能提交
 *      2，没有填写任何信息时，该条记录不要传到后台
 *  @param   obj     总信息
 *  @param   a       证件信息
 */
export function isComplete(obj, a) {
  const temp = {
    flag: true,
    message: ''
  }
  for (let i = 0; i < obj[a].length; i++) {
    for (const key in obj[a]) {
      // 填写了一个
      if (obj[a][key] !== '' && obj[a][key] !== null) {
        const a = obj[a].licenseId !== '' && obj[a].licenseId !== null
        const b = obj[a].gmtReg !== '' && obj[a].gmtReg !== null
        const c = obj[a].gmtOverdue !== '' && obj[a].gmtOverdue !== null
        const d = obj[a].fileList.length > 0
        if (a && b && c && d) {
          //
        } else {
          temp.flag = false
          temp.message = '请完整填写证照信息。如上传附件等'
          return temp
        }
      }
    }
  }
}

/**
 * 判断图片大小，格式是否合法
 *  1 文件的类型
 *  2 文件的大小
 */
export function authImage(file) {
  const arr = ['image/jpeg', 'image/png', 'application/pdf']
  const reg = /\.(JPEG|jpeg|JPG|jpg|GIF|gif|BMP|bmp|PNG|png|rar|RAR|zip|ZIP|pdf|PDF)$/
  const isLt5M = file.size / 1024 / 1024 <= 5
  const isJPG = arr.indexOf(file.type) !== -1 || reg.test(file.name)
  if (!isJPG) {
    Message.error('上传附件格式不支持!')
  }
  if (!isLt5M) {
    Message.error('附件大小超过 5MB!')
  }
  return isJPG && isLt5M
}

/**
 * 判断文件大小，格式是否为合法的excel
 *  1 文件的类型
 *  2 文件的大小
 */
export function authExcel(file) {
  const arr = ['application/vnd.ms-excel']
  const reg = /\.(xls|xlsx)$/
  const isLt2M = file.size / 1024 / 1024 <= 2
  const isExcel = arr.indexOf(file.type) !== -1 || reg.test(file.name)
  if (!isExcel) {
    Message.error('只能上传excel类型文件!')
  }
  if (!isLt2M) {
    Message.error('附件大小超过 2MB!')
  }
  return isExcel && isLt2M
}

/**
 *  通过证照列表给保存证照数据添加是否永久有效
 */
export function add_isPerm(dataArr, arr) {
  for (let i = 0; i < arr.length; i++) {
    dataArr[i].isPerm = arr[i].isPerm
  }
}

/**
 *  照片上传提示
 */
export function uploadTips() {
  return '注： 附件大小不能超过5M。支持上传格式有: jpg, gif, bmp, png, pdf, zip, rar'
}

/**
 *  凭借后台返回code 等于 -2时，  错误table
 */
export function errorMessageBox(arr) {
  if (arr instanceof Array) {
    let str = '<table class="errorMessageBox">'
    str += '<tr><th>' + arr[0].split(':')[0] + '</th><th>失败原因</th></tr>'
    for (let i = 0; i < arr.length; i++) {
      const temp = arr[i].split(':')
      str += '<tr><td>' + temp[1] + '</td>'
      str += '<td style="color:red">' + temp[2] + '</td></tr>'
    }
    str += '</table>'
    return str
  } else {
    return arr
  }
}

// 判断列表有哪些照片（ 正 反面）
export function photoAttachType(val, list) {
  const t = list.find(i => i.attachType === val)
  if (t) {
    // 有 不能再次上传
    return true
  } else {
    // 无 能上传
    return false
  }
}

// 初始化弹框页面显示标志
export function licInit(o) {
  for (let i = 0; i <= o.licNum; i++) {
    o['lic0' + i] = false
  }
}

// 支持上传识别的证件编号
export function distinguishList() {
  return ['lic01', 'lic02', 'lic07', 'lic10']
}

// 获取支持上传识别接口
export function enableDistinguish(code) {
  if (this.distinguishList().indexOf(code) === -1) {
    return ''
  } else {
    return '该编号支持上传附件识别'
  }
}

/**
 * 图片压缩模块
 */
export function imageCompress(file, p, callback) {
  const ready = new FileReader()
  /* 开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,
		如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.*/
  ready.readAsDataURL(file) // 调用reader.readAsDataURL()方法，把图片转成base64
  ready.onload = function() {
    const re = this.result
    canvasDataURL(re, p, callback)
  }
}

function canvasDataURL(path, obj, callback) {
  const img = new Image()
  img.src = path
  img.onload = function() {
    const that = this
    // 默认按比例压缩
    let w = that.width
    let h = that.height
    const scale = w / h
    w = obj.width || w
    h = obj.height || (w / scale)
    let quality = 0.6 // 默认图片质量为0.7
    // 生成canvas
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')
    // 创建属性节点
    const anw = document.createAttribute('width')
    anw.nodeValue = w
    const anh = document.createAttribute('height')
    anh.nodeValue = h
    canvas.setAttributeNode(anw)
    canvas.setAttributeNode(anh)
    ctx.drawImage(that, 0, 0, w, h)
    // 图像质量
    if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
      quality = obj.quality
    }
    // quality值越小，所绘制出的图像越模糊
    const base64 = canvas.toDataURL('image/jpeg', quality)
    // 回调函数返回base64的值
    // console.log('base64', base64)
    callback(base64)
  }
}
/**
 * 将以base64的图片url数据转换为Blob
 * @param urlData
 * 用url方式表示的base64图片数据
 */
export function convertBase64UrlToBlob(urlData) {
  const arr = urlData.split(',')
  const mime = arr[0].match(/:(.*?);/)[1]
  const bstr = atob(arr[1])
  let n = bstr.length
  const u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new Blob([u8arr], { type: mime })
}

// 图片转码
export function getObjectURL(file) {
  let url = null
  if (window.createObjectURL !== undefined) { // basic
    url = window.createObjectURL(file)
  } else if (window.URL !== undefined) { // mozilla(firefox)
    url = window.URL.createObjectURL(file)
  } else if (window.webkitURL !== undefined) { // webkit or chrome
    url = window.webkitURL.createObjectURL(file)
  }
  return url
}

// 格式化证照识别的时间
export function formatLicTime(str) {
  const s = str.replace(/(\d{4})(\d{2})(\d{2})/g, '$1/$2/$3')
  return new Date(s).getTime()
}

// 填充证照信息
// 格式化返回参数
export function fillLicenseData(a_a, a_b) {
  const temp = []
  for (let n = 0; n < a_b.length; n++) {
    temp.push({
      licenseTypeId: (a_b[n].id + ''),
      licenseId: '',
      gmtReg: '',
      gmtOverdue: '',
      licenseAttachList: [],
      status: '1' })
  }
  a_b = temp
  if (a_a.length === 0) {
    return a_b
  }
  for (let i = 0; i < a_a.length; i++) {
    for (let j = 0; j < a_b.length; j++) {
      if (parseInt(a_a[i].licenseTypeId) === parseInt(a_b[j].licenseTypeId)) {
        a_b[j].id = a_a[i].id
        a_b[j].licenseId = a_a[i].licenseId
        // 当后端返回null时间时，将其转化为 ''
        if (a_a[i].gmtReg === null) {
          a_b[j].gmtReg = ''
        } else {
          a_b[j].gmtReg = a_a[i].gmtReg
        }
        if (a_b[j].gmtOverdue === null) {
          a_b[j].gmtOverdue = ''
        } else {
          a_b[j].gmtOverdue = a_a[i].gmtOverdue
        }
        a_b[j].licenseAttachList = a_a[i].licenseAttachList
        a_b[j].status = a_a[i].status
      }
    }
  }
  return a_b
}

// 验证手机号
export function validatePhone(value) {
  function isPoneAvailable(str) {
    const myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
    const myreg1 = /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/
    const myreg2 = /^\d{7,8}$/
    if (!myreg.test(str) && !myreg1.test(str)) {
      if (myreg2.test(str)) {
        return 'ADD'
      } else {
        return false
      }
    } else {
      return true
    }
  }
  if (!(value)) {
    return false
  } else if (isPoneAvailable(value) === 'ADD') {
    return false
  } else if (isPoneAvailable(value)) {
    return true
  } else {
    return false
  }
}

// 验证车牌号
export function regPlate(value) {
  const reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
  if (reg.test(value)) {
    return true
  } else {
    return false
  }
}
